equals
?Thread
,每個thread的行為表現都是唯一的,無法單純地用equals
去判斷兩個物件一不一樣,thread只能跟自己一樣,所以不適合覆寫。equals
去驗證兩個物件的值相不相同: 一般來說,我們不會刻意去驗證java.util.Random
產生出來的值一不一樣,所以沒必要去覆寫。equals
且也符合子類別的需求。equals
。覆寫equals
雖然很簡單,但會引發一些錯誤,非必要還是不要使用,真的需要覆寫equals
的情境,大部分會是需要確認物件裡面的某個值是不是相同,才需要覆寫。舉例來說,像是Integer
或Date
,因為需要比較數字相不相同和時間一不一樣的需求,就很適合覆寫equals
。
equals
時,必須也覆寫hashCode
。兩個物件相等,基本上hash code也要一樣,不然在使用HashMap
等跟hash有關的collection時,會出現令人困惑的情況,同一個HashMap
的兩個key,居然是相等的。equals
裡面的判斷邏輯太過複雜。equals
的參數型別Object
修改成其他型別,因為這個不是override而是overloads。public boolean equals(Point obj) {
.....
}
equals
時加上@Override
這個annotation,可以避免上一個問題。今天寫的大部分都是一些注意事項,明天再來說明,要覆寫equals
時,有哪些規則需要遵守。